--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
android/app/src/main/java/com/meshchatx/MainActivity.java a6764d3d38e8710c5352bbfe4024dbb36c3a48a2 (a6764d3d) Text, 26.00 KB
Tff7b72package T7ee787com.meshchatxTb4b4b4;
Tff7b72import T7ee787android.ManifestTb4b4b4;
Tff7b72import T7ee787android.annotation.SuppressLintTb4b4b4;
Tff7b72import T7ee787android.content.ActivityNotFoundExceptionTb4b4b4;
Tff7b72import T7ee787android.content.ContextTb4b4b4;
Tff7b72import T7ee787android.content.IntentTb4b4b4;
Tff7b72import T7ee787android.content.pm.PackageManagerTb4b4b4;
Tff7b72import T7ee787android.hardware.usb.UsbManagerTb4b4b4;
Tff7b72import T7ee787android.net.UriTb4b4b4;
Tff7b72import T7ee787android.os.BuildTb4b4b4;
Tff7b72import T7ee787android.os.BundleTb4b4b4;
Tff7b72import T7ee787android.os.HandlerTb4b4b4;
Tff7b72import T7ee787android.os.LooperTb4b4b4;
Tff7b72import T7ee787android.os.PowerManagerTb4b4b4;
Tff7b72import T7ee787android.provider.SettingsTb4b4b4;
Tff7b72import T7ee787android.webkit.PermissionRequestTb4b4b4;
Tff7b72import T7ee787android.webkit.ValueCallbackTb4b4b4;
Tff7b72import T7ee787android.webkit.WebChromeClientTb4b4b4;
Tff7b72import T7ee787android.webkit.WebResourceErrorTb4b4b4;
Tff7b72import T7ee787android.webkit.WebResourceRequestTb4b4b4;
Tff7b72import T7ee787android.webkit.WebSettingsTb4b4b4;
Tff7b72import T7ee787android.webkit.JavascriptInterfaceTb4b4b4;
Tff7b72import T7ee787android.webkit.WebViewTb4b4b4;
Tff7b72import T7ee787android.webkit.WebViewClientTb4b4b4;
Tff7b72import T7ee787android.widget.ImageViewTb4b4b4;
Tff7b72import T7ee787android.widget.ProgressBarTb4b4b4;
Tff7b72import T7ee787android.widget.TextViewTb4b4b4;
Tff7b72import T7ee787android.widget.ToastTb4b4b4;
Tff7b72import T7ee787androidx.activity.result.ActivityResultLauncherTb4b4b4;
Tff7b72import T7ee787androidx.activity.result.contract.ActivityResultContractsTb4b4b4;
Tff7b72import T7ee787androidx.core.app.ActivityCompatTb4b4b4;
Tff7b72import T7ee787androidx.core.content.ContextCompatTb4b4b4;
Tff7b72import T7ee787androidx.appcompat.app.AppCompatActivityTb4b4b4;
Tff7b72import T7ee787com.chaquo.python.PythonTb4b4b4;
Tff7b72import T7ee787com.chaquo.python.android.AndroidPlatformTb4b4b4;
Tff7b72import T7ee787java.io.PrintWriterTb4b4b4;
Tff7b72import T7ee787java.io.StringWriterTb4b4b4;
Tff7b72import T7ee787java.util.ArrayListTb4b4b4;
Tff7b72import T7ee787java.util.ListTb4b4b4;
Tff7b72import T7ee787org.json.JSONObjectTb4b4b4;
Tff7b72public Tff7b72class T56d364MainActivity Tff7b72extends Te6edf3AppCompatActivity Tb4b4b4{
Tff7b72private Te6edf3WebView Te6edf3webViewTb4b4b4;
Tff7b72private Te6edf3ProgressBar Te6edf3progressBarTb4b4b4;
Tff7b72private Te6edf3ImageView Te6edf3loadingLogoTb4b4b4;
Tff7b72private Te6edf3TextView Te6edf3loadingTextTb4b4b4;
Tff7b72private Te6edf3TextView Te6edf3errorTextTb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Te6edf3String Te6edf3SERVER_URL Tff7b72= Ta5d6ff"Ta5d6ffhttps://127.0.0.1:8000Ta5d6ff"Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3SERVER_PORT Tff7b72= T79c0ff8000Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3RUNTIME_PERMISSIONS_REQUEST_CODE Tff7b72= T79c0ff1001Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3WEB_MEDIA_PERMISSION_REQUEST_CODE Tff7b72= T79c0ff1003Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3RNODE_BLUETOOTH_PERMISSION_REQUEST_CODE Tff7b72= T79c0ff1004Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Te6edf3String Te6edf3PREFS_NAME Tff7b72= Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff"Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Te6edf3String Te6edf3PREF_BATTERY_OPT_REQUESTED Tff7b72= Ta5d6ff"Ta5d6ffbattery_opt_requestedTa5d6ff"Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657int Te6edf3MAX_CONNECTION_ATTEMPTS Tff7b72= T79c0ff120Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657long Te6edf3CONNECTION_RETRY_INITIAL_DELAY_MS Tff7b72= T79c0ff500Tb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Tffa657long Te6edf3CONNECTION_RETRY_MAX_DELAY_MS Tff7b72= T79c0ff5000Tb4b4b4;
Tff7b72private Tff7b72final Te6edf3Handler Te6edf3mainHandler Tff7b72= Tff7b72new Te6edf3HandlerTb4b4b4(Te6edf3LooperTb4b4b4.Te6edf3getMainLooperTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72private Te6edf3PermissionRequest Te6edf3pendingWebPermissionRequest Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72private Te6edf3ValueCallbackTff7b72<Te6edf3UriTff7b72[Tff7b72]Tff7b72> Te6edf3filePathCallback Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72private Tffa657boolean Te6edf3startupRequestHadLoadError Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72private Tffa657boolean Te6edf3startupPageLoaded Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72private Tffa657boolean Te6edf3backendFailed Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72private Tffa657int Te6edf3connectionAttempts Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72private Te6edf3String Te6edf3pendingIntentUri Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72private Tff7b72static Tff7b72final Te6edf3StringTff7b72[Tff7b72] Te6edf3STARTUP_PHASES Tff7b72= Tff7b72new Te6edf3StringTff7b72[Tff7b72] Tb4b4b4{
Ta5d6ff"Ta5d6ffStarting MeshChatX...Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffInitializing Reticulum network stack...Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffLoading MeshChatX frontend...Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffEstablishing secure local connection...Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffFinalizing startup...Ta5d6ff"
Tb4b4b4}Tb4b4b4;
Tff7b72private Tff7b72final Te6edf3ActivityResultLauncherTff7b72<Te6edf3IntentTff7b72> Te6edf3filePickerLauncher Tff7b72= Te6edf3registerForActivityResultTb4b4b4(
Tff7b72new Te6edf3ActivityResultContractsTb4b4b4.Te6edf3StartActivityForResultTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3result Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3UriTff7b72[Tff7b72] Te6edf3selection Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3getResultCodeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3RESULT_OK Tff7b72&Tff7b72& Te6edf3resultTb4b4b4.Te6edf3getDataTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3Intent Te6edf3data Tff7b72= Te6edf3resultTb4b4b4.Te6edf3getDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3dataTb4b4b4.Te6edf3getClipDataTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3count Tff7b72= Te6edf3dataTb4b4b4.Te6edf3getClipDataTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3getItemCountTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3selection Tff7b72= Tff7b72new Te6edf3UriTff7b72[Te6edf3countTff7b72]Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3countTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3selectionTff7b72[Te6edf3iTff7b72] Tff7b72= Te6edf3dataTb4b4b4.Te6edf3getClipDataTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3getItemAtTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4.Te6edf3getUriTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3dataTb4b4b4.Te6edf3getDataTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3selection Tff7b72= Tff7b72new Te6edf3UriTff7b72[Tff7b72] Tb4b4b4{ Te6edf3dataTb4b4b4.Te6edf3getDataTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3filePathCallback Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3filePathCallbackTb4b4b4.Te6edf3onReceiveValueTb4b4b4(Te6edf3selectionTb4b4b4)Tb4b4b4;
Te6edf3filePathCallback Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4)Tb4b4b4;
Tf0883e@SuppressLintTb4b4b4(Ta5d6ff"Ta5d6ffSetJavaScriptEnabledTa5d6ff"Tb4b4b4)
Tf0883e@Override
Tff7b72protected Tffa657void Td2a8ffonCreateTb4b4b4(Te6edf3Bundle Te6edf3savedInstanceStateTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onCreateTb4b4b4(Te6edf3savedInstanceStateTb4b4b4)Tb4b4b4;
Te6edf3setContentViewTb4b4b4(Te6edf3RTb4b4b4.Te6edf3layoutTb4b4b4.Te6edf3activity_mainTb4b4b4)Tb4b4b4;
Te6edf3webView Tff7b72= Te6edf3findViewByIdTb4b4b4(Te6edf3RTb4b4b4.Te6edf3idTb4b4b4.Te6edf3webViewTb4b4b4)Tb4b4b4;
Te6edf3progressBar Tff7b72= Te6edf3findViewByIdTb4b4b4(Te6edf3RTb4b4b4.Te6edf3idTb4b4b4.Te6edf3progressBarTb4b4b4)Tb4b4b4;
Te6edf3loadingLogo Tff7b72= Te6edf3findViewByIdTb4b4b4(Te6edf3RTb4b4b4.Te6edf3idTb4b4b4.Te6edf3loadingLogoTb4b4b4)Tb4b4b4;
Te6edf3loadingText Tff7b72= Te6edf3findViewByIdTb4b4b4(Te6edf3RTb4b4b4.Te6edf3idTb4b4b4.Te6edf3loadingTextTb4b4b4)Tb4b4b4;
Te6edf3errorText Tff7b72= Te6edf3findViewByIdTb4b4b4(Te6edf3RTb4b4b4.Te6edf3idTb4b4b4.Te6edf3errorTextTb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3INVISIBLETb4b4b4)Tb4b4b4;
Te6edf3showLoadingTb4b4b4(Ta5d6ff"Ta5d6ffStarting MeshChatX backend...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3PythonTb4b4b4.Te6edf3isStartedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3PythonTb4b4b4.Te6edf3startTb4b4b4(Tff7b72new Te6edf3AndroidPlatformTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3requestRuntimePermissionsIfNeededTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3requestBatteryOptimizationExemptionIfNeededTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3WebSettings Te6edf3webSettings Tff7b72= Te6edf3webViewTb4b4b4.Te6edf3getSettingsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setJavaScriptEnabledTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setDomStorageEnabledTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setDatabaseEnabledTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setAllowFileAccessTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setAllowContentAccessTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setMixedContentModeTb4b4b4(Te6edf3WebSettingsTb4b4b4.Te6edf3MIXED_CONTENT_ALWAYS_ALLOWTb4b4b4)Tb4b4b4;
Te6edf3webSettingsTb4b4b4.Te6edf3setMediaPlaybackRequiresUserGestureTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3setWebViewClientTb4b4b4(Tff7b72new Te6edf3WebViewClientTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonPageFinishedTb4b4b4(Te6edf3WebView Te6edf3viewTb4b4b4, Te6edf3String Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onPageFinishedTb4b4b4(Te6edf3viewTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isStartupRequestTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3startupRequestHadLoadErrorTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3startupPageLoaded Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3mainHandlerTb4b4b4.Te6edf3removeCallbacksAndMessagesTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Te6edf3loadingLogoTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3progressBarTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3loadingTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3errorTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3dispatchPendingIntentUriTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonPageStartedTb4b4b4(Te6edf3WebView Te6edf3viewTb4b4b4, Te6edf3String Te6edf3urlTb4b4b4, Te6edf3androidTb4b4b4.Te6edf3graphicsTb4b4b4.Te6edf3Bitmap Te6edf3faviconTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onPageStartedTb4b4b4(Te6edf3viewTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3faviconTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isStartupRequestTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3startupRequestHadLoadError Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3startupPageLoadedTb4b4b4) Tb4b4b4{
Te6edf3webViewTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3INVISIBLETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3progressBarTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonReceivedErrorTb4b4b4(Te6edf3WebView Te6edf3viewTb4b4b4, Te6edf3WebResourceRequest Te6edf3requestTb4b4b4, Te6edf3WebResourceError Te6edf3errorTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onReceivedErrorTb4b4b4(Te6edf3viewTb4b4b4, Te6edf3requestTb4b4b4, Te6edf3errorTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3request Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3requestTb4b4b4.Te6edf3isForMainFrameTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3isStartupRequestTb4b4b4(Te6edf3requestTb4b4b4.Te6edf3getUrlTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3startupRequestHadLoadError Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3viewTb4b4b4.Te6edf3stopLoadingTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viewTb4b4b4.Te6edf3loadUrlTb4b4b4(Ta5d6ff"Ta5d6ffabout:blankTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3backendFailed Tff7b72&Tff7b72& Tff7b72!Te6edf3startupPageLoadedTb4b4b4) Tb4b4b4{
Te6edf3CharSequence Te6edf3description Tff7b72= Tb4b4b4(Te6edf3error Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tff7b72? Te6edf3errorTb4b4b4.Te6edf3getDescriptionTb4b4b4(Tb4b4b4) Tb4b4b4: Ta5d6ff"Ta5d6ffUnknown errorTa5d6ff"Tb4b4b4;
Te6edf3showStartupErrorTb4b4b4(Ta5d6ff"Ta5d6ffWebView failed to load MeshChatX: Ta5d6ff" Tff7b72+ Te6edf3descriptionTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonReceivedErrorTb4b4b4(Te6edf3WebView Te6edf3viewTb4b4b4, Tffa657int Te6edf3errorCodeTb4b4b4, Te6edf3String Te6edf3descriptionTb4b4b4, Te6edf3String Te6edf3failingUrlTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onReceivedErrorTb4b4b4(Te6edf3viewTb4b4b4, Te6edf3errorCodeTb4b4b4, Te6edf3descriptionTb4b4b4, Te6edf3failingUrlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isStartupRequestTb4b4b4(Te6edf3failingUrlTb4b4b4) Tff7b72&Tff7b72& Tff7b72!Te6edf3startupPageLoadedTb4b4b4) Tb4b4b4{
Te6edf3startupRequestHadLoadError Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3viewTb4b4b4.Te6edf3stopLoadingTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viewTb4b4b4.Te6edf3loadUrlTb4b4b4(Ta5d6ff"Ta5d6ffabout:blankTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3backendFailedTb4b4b4) Tb4b4b4{
Te6edf3showStartupErrorTb4b4b4(Ta5d6ff"Ta5d6ffWebView failed to load MeshChatX: Ta5d6ff" Tff7b72+ Te6edf3descriptionTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@SuppressLintTb4b4b4(Ta5d6ff"Ta5d6ffWebViewClientOnReceivedSslErrorTa5d6ff"Tb4b4b4)
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonReceivedSslErrorTb4b4b4(Te6edf3WebView Te6edf3viewTb4b4b4, Te6edf3androidTb4b4b4.Te6edf3webkitTb4b4b4.Te6edf3SslErrorHandler Te6edf3handlerTb4b4b4, Te6edf3androidTb4b4b4.Te6edf3netTb4b4b4.Te6edf3httpTb4b4b4.Te6edf3SslError Te6edf3errorTb4b4b4) Tb4b4b4{
T8b949e// Ignore SSL certificate errors for localhost
Te6edf3handlerTb4b4b4.Te6edf3proceedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3addJavascriptInterfaceTb4b4b4(Tff7b72new Te6edf3MeshChatXAndroidBridgeTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffMeshChatXAndroidTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3setWebChromeClientTb4b4b4(Tff7b72new Te6edf3WebChromeClientTb4b4b4(Tb4b4b4) Tb4b4b4{
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonPermissionRequestTb4b4b4(Tff7b72final Te6edf3PermissionRequest Te6edf3requestTb4b4b4) Tb4b4b4{
Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3request Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657boolean Te6edf3needsAudioCapture Tff7b72= Tff7b72falseTb4b4b4;
Tffa657boolean Te6edf3needsVideoCapture Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72for Tb4b4b4(Te6edf3String Te6edf3resource Tb4b4b4: Te6edf3requestTb4b4b4.Te6edf3getResourcesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3PermissionRequestTb4b4b4.Te6edf3RESOURCE_AUDIO_CAPTURETb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3resourceTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3needsAudioCapture Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3PermissionRequestTb4b4b4.Te6edf3RESOURCE_VIDEO_CAPTURETb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3resourceTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3needsVideoCapture Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3needsAudioCapture Tff7b72&Tff7b72& Tff7b72!Te6edf3needsVideoCaptureTb4b4b4) Tb4b4b4{
Te6edf3requestTb4b4b4.Te6edf3grantTb4b4b4(Te6edf3requestTb4b4b4.Te6edf3getResourcesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3ListTff7b72<Te6edf3StringTff7b72> Te6edf3missingPermissions Tff7b72= Tff7b72new Te6edf3ArrayListTff7b72<Tff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(
Te6edf3needsAudioCapture Tff7b72&Tff7b72&
Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4)
Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTED
Tb4b4b4) Tb4b4b4{
Te6edf3missingPermissionsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3needsVideoCapture Tff7b72&Tff7b72&
Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3CAMERATb4b4b4)
Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTED
Tb4b4b4) Tb4b4b4{
Te6edf3missingPermissionsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3CAMERATb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3missingPermissionsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3requestTb4b4b4.Te6edf3grantTb4b4b4(Te6edf3requestTb4b4b4.Te6edf3getResourcesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3pendingWebPermissionRequest Tff7b72= Te6edf3requestTb4b4b4;
Te6edf3ActivityCompatTb4b4b4.Te6edf3requestPermissionsTb4b4b4(
Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4,
Te6edf3missingPermissionsTb4b4b4.Te6edf3toArrayTb4b4b4(Tff7b72new Te6edf3StringTff7b72[T79c0ff0Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3WEB_MEDIA_PERMISSION_REQUEST_CODE
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657boolean Td2a8ffonShowFileChooserTb4b4b4(
Te6edf3WebView Te6edf3webViewTb4b4b4,
Te6edf3ValueCallbackTff7b72<Te6edf3UriTff7b72[Tff7b72]Tff7b72> Te6edf3filePathCallbackTb4b4b4,
Te6edf3WebChromeClientTb4b4b4.Te6edf3FileChooserParams Te6edf3fileChooserParams
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallback Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallbackTb4b4b4.Te6edf3onReceiveValueTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallback Tff7b72= Te6edf3filePathCallbackTb4b4b4;
Te6edf3Intent Te6edf3chooserIntentTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3chooserIntent Tff7b72= Te6edf3fileChooserParams Tff7b72!Tff7b72= Tff7b72null
Tff7b72? Te6edf3fileChooserParamsTb4b4b4.Te6edf3createIntentTb4b4b4(Tb4b4b4)
Tb4b4b4: Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3ACTION_GET_CONTENTTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3chooserIntent Tff7b72= Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3ACTION_GET_CONTENTTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3chooserIntentTb4b4b4.Te6edf3addCategoryTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3CATEGORY_OPENABLETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3chooserIntentTb4b4b4.Te6edf3getTypeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3chooserIntentTb4b4b4.Te6edf3setTypeTb4b4b4(Ta5d6ff"Ta5d6ff*/*Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3fileChooserParams Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3fileChooserParamsTb4b4b4.Te6edf3getAcceptTypesTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3chooserIntentTb4b4b4.Te6edf3putExtraTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3EXTRA_MIME_TYPESTb4b4b4, Te6edf3fileChooserParamsTb4b4b4.Te6edf3getAcceptTypesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3chooserIntentTb4b4b4.Te6edf3putExtraTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3EXTRA_ALLOW_MULTIPLETb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3filePickerLauncherTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3chooserIntentTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3ActivityNotFoundException Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallback Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallbackTb4b4b4.Te6edf3onReceiveValueTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4.Te6edf3filePathCallback Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3ToastTb4b4b4.Te6edf3makeTextTb4b4b4(Te6edf3MainActivityTb4b4b4.Te6edf3thisTb4b4b4, Ta5d6ff"Ta5d6ffNo file picker availableTa5d6ff"Tb4b4b4, Te6edf3ToastTb4b4b4.Te6edf3LENGTH_SHORTTb4b4b4)Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3handleIncomingIntentTb4b4b4(Te6edf3getIntentTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3startMeshChatServerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3scheduleConnectionRetryTb4b4b4(Ta5d6ff"Ta5d6ffConnecting to local server...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@Override
Tff7b72protected Tffa657void Td2a8ffonNewIntentTb4b4b4(Te6edf3Intent Te6edf3intentTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onNewIntentTb4b4b4(Te6edf3intentTb4b4b4)Tb4b4b4;
Te6edf3setIntentTb4b4b4(Te6edf3intentTb4b4b4)Tb4b4b4;
Te6edf3handleIncomingIntentTb4b4b4(Te6edf3intentTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3startupPageLoadedTb4b4b4) Tb4b4b4{
Te6edf3dispatchPendingIntentUriTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffrequestRuntimePermissionsIfNeededTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ListTff7b72<Te6edf3StringTff7b72> Te6edf3missingPermissions Tff7b72= Tff7b72new Te6edf3ArrayListTff7b72<Tff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3addIfMissingTb4b4b4(Te6edf3missingPermissionsTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3STb4b4b4) Tb4b4b4{
Te6edf3addIfMissingTb4b4b4(Te6edf3missingPermissionsTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_CONNECTTb4b4b4)Tb4b4b4;
Te6edf3addIfMissingTb4b4b4(Te6edf3missingPermissionsTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_SCANTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3TIRAMISUTb4b4b4) Tb4b4b4{
Te6edf3addIfMissingTb4b4b4(Te6edf3missingPermissionsTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3POST_NOTIFICATIONSTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3missingPermissionsTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ActivityCompatTb4b4b4.Te6edf3requestPermissionsTb4b4b4(
Tff7b72thisTb4b4b4,
Te6edf3missingPermissionsTb4b4b4.Te6edf3toArrayTb4b4b4(Tff7b72new Te6edf3StringTff7b72[T79c0ff0Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3RUNTIME_PERMISSIONS_REQUEST_CODE
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffrequestBatteryOptimizationExemptionIfNeededTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72< Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3MTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3PowerManager Te6edf3powerManager Tff7b72= Tb4b4b4(Te6edf3PowerManagerTb4b4b4) Te6edf3getSystemServiceTb4b4b4(Te6edf3POWER_SERVICETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3powerManager Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3powerManagerTb4b4b4.Te6edf3isIgnoringBatteryOptimizationsTb4b4b4(Te6edf3getPackageNameTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657boolean Te6edf3requestedBefore Tff7b72= Te6edf3getSharedPreferencesTb4b4b4(Te6edf3PREFS_NAMETb4b4b4, Te6edf3MODE_PRIVATETb4b4b4)Tb4b4b4.Te6edf3getBooleanTb4b4b4(Te6edf3PREF_BATTERY_OPT_REQUESTEDTb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3requestedBeforeTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3getSharedPreferencesTb4b4b4(Te6edf3PREFS_NAMETb4b4b4, Te6edf3MODE_PRIVATETb4b4b4)Tb4b4b4.Te6edf3editTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3putBooleanTb4b4b4(Te6edf3PREF_BATTERY_OPT_REQUESTEDTb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4.Te6edf3applyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3Intent Te6edf3intent Tff7b72= Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSTb4b4b4)Tb4b4b4;
Te6edf3intentTb4b4b4.Te6edf3setDataTb4b4b4(Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Ta5d6ff"Ta5d6ffpackage:Ta5d6ff" Tff7b72+ Te6edf3getPackageNameTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3startActivityTb4b4b4(Te6edf3intentTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3ActivityNotFoundException Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3startActivityTb4b4b4(Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGSTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3ActivityNotFoundException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Te6edf3ToastTb4b4b4.Te6edf3makeTextTb4b4b4(Tff7b72thisTb4b4b4, Ta5d6ff"Ta5d6ffOpen battery settings and allow unrestricted background usage for MeshChatXTa5d6ff"Tb4b4b4, Te6edf3ToastTb4b4b4.Te6edf3LENGTH_LONGTb4b4b4)Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffaddIfMissingTb4b4b4(Te6edf3ListTff7b72<Te6edf3StringTff7b72> Te6edf3missingPermissionsTb4b4b4, Te6edf3String Te6edf3permissionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3permissionTb4b4b4) Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Te6edf3missingPermissionsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3permissionTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonRequestPermissionsResultTb4b4b4(Tffa657int Te6edf3requestCodeTb4b4b4, Te6edf3StringTff7b72[Tff7b72] Te6edf3permissionsTb4b4b4, Tffa657intTff7b72[Tff7b72] Te6edf3grantResultsTb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onRequestPermissionsResultTb4b4b4(Te6edf3requestCodeTb4b4b4, Te6edf3permissionsTb4b4b4, Te6edf3grantResultsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3requestCode Tff7b72=Tff7b72= Te6edf3WEB_MEDIA_PERMISSION_REQUEST_CODETb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pendingWebPermissionRequest Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657boolean Te6edf3granted Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3result Tb4b4b4: Te6edf3grantResultsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3result Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Te6edf3granted Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3grantedTb4b4b4) Tb4b4b4{
Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3grantTb4b4b4(Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3getResourcesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3denyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3pendingWebPermissionRequest Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3requestCode Tff7b72!Tff7b72= Te6edf3RUNTIME_PERMISSIONS_REQUEST_CODETb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3permissionsTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3grantResultsTff7b72[Te6edf3iTff7b72] Tff7b72!Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3permissionsTff7b72[Te6edf3iTff7b72]Tb4b4b4) Tff7b72&Tff7b72& Te6edf3pendingWebPermissionRequest Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3denyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pendingWebPermissionRequest Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3pendingWebPermissionRequest Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72&
Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Tff7b72thisTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3RECORD_AUDIOTb4b4b4) Tff7b72=Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTED
Tb4b4b4) Tb4b4b4{
Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3grantTb4b4b4(Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3getResourcesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3pendingWebPermissionRequest Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffstartMeshChatServerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72new Te6edf3ThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3Python Te6edf3py Tff7b72= Te6edf3PythonTb4b4b4.Te6edf3getInstanceTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3appFilesDir Tff7b72= Te6edf3getFilesDirTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3getAbsolutePathTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pyTb4b4b4.Te6edf3getModuleTb4b4b4(Ta5d6ff"Ta5d6ffmeshchat_wrapperTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3callAttrTb4b4b4(Ta5d6ff"Ta5d6ffstart_serverTa5d6ff"Tb4b4b4, Te6edf3SERVER_PORTTb4b4b4, Te6edf3appFilesDirTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3Exception Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3backendFailed Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3showStartupErrorTb4b4b4(Ta5d6ff"Ta5d6ffMeshChatX backend failed:Ta5d6ff\Ta5d6ffnTa5d6ff" Tff7b72+ Te6edf3toStackTraceTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657boolean Td2a8ffisStartupRequestTb4b4b4(Te6edf3String Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3url Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3urlTb4b4b4.Te6edf3startsWithTb4b4b4(Te6edf3SERVER_URLTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffhandleIncomingIntentTb4b4b4(Te6edf3Intent Te6edf3intentTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3intent Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Tff7b72!Te6edf3IntentTb4b4b4.Te6edf3ACTION_VIEWTb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3intentTb4b4b4.Te6edf3getActionTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3Uri Te6edf3data Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3data Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3dataTb4b4b4.Te6edf3getSchemeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3String Te6edf3scheme Tff7b72= Te6edf3dataTb4b4b4.Te6edf3getSchemeTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Ta5d6ff"Ta5d6fflxmaTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3schemeTb4b4b4) Tff7b72&Tff7b72& Tff7b72!Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3schemeTb4b4b4) Tff7b72&Tff7b72& Tff7b72!Ta5d6ff"Ta5d6fflxmTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3schemeTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3pendingIntentUri Tff7b72= Te6edf3dataTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffdispatchPendingIntentUriTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3webView Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3pendingIntentUri Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3pendingIntentUriTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3String Te6edf3uri Tff7b72= Te6edf3pendingIntentUriTb4b4b4;
Te6edf3pendingIntentUri Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3String Te6edf3js Tff7b72=
Ta5d6ff"Ta5d6ffwindow.dispatchEvent(new CustomEvent('meshchatx-intent-uri',{detail:Ta5d6ff" Tff7b72+
Te6edf3JSONObjectTb4b4b4.Te6edf3quoteTb4b4b4(Te6edf3uriTb4b4b4) Tff7b72+
Ta5d6ff"Ta5d6ff}));Ta5d6ff"Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3evaluateJavascriptTb4b4b4(Te6edf3jsTb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffscheduleConnectionRetryTb4b4b4(Te6edf3String Te6edf3messageTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3startupPageLoaded Tff7b72|Tff7b72| Te6edf3backendFailedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3showLoadingTb4b4b4(Te6edf3message Tff7b72+ Ta5d6ff"Ta5d6ff (Ta5d6ff" Tff7b72+ Tb4b4b4(Te6edf3connectionAttempts Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72+ Te6edf3MAX_CONNECTION_ATTEMPTS Tff7b72+ Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tffa657long Te6edf3retryDelayMs Tff7b72= Te6edf3MathTb4b4b4.Te6edf3minTb4b4b4(
Te6edf3CONNECTION_RETRY_MAX_DELAY_MSTb4b4b4,
Te6edf3CONNECTION_RETRY_INITIAL_DELAY_MS Tff7b72+ Tb4b4b4(Te6edf3connectionAttempts Tff7b72* T79c0ff250LTb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3mainHandlerTb4b4b4.Te6edf3postDelayedTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3startupPageLoaded Tff7b72|Tff7b72| Te6edf3backendFailedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3connectionAttempts Tff7b72+Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3connectionAttempts Tff7b72> Te6edf3MAX_CONNECTION_ATTEMPTSTb4b4b4) Tb4b4b4{
Te6edf3showStartupErrorTb4b4b4(Ta5d6ff"Ta5d6ffFailed to connect to local MeshChatX server after waiting for startup.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3webViewTb4b4b4.Te6edf3loadUrlTb4b4b4(Te6edf3SERVER_URLTb4b4b4)Tb4b4b4;
Te6edf3scheduleConnectionRetryTb4b4b4(Ta5d6ff"Ta5d6ffRetrying connection...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4, Te6edf3retryDelayMsTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Te6edf3String Td2a8fftoStackTraceTb4b4b4(Te6edf3Throwable Te6edf3errorTb4b4b4) Tb4b4b4{
Te6edf3StringWriter Te6edf3sw Tff7b72= Tff7b72new Te6edf3StringWriterTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3PrintWriter Te6edf3pw Tff7b72= Tff7b72new Te6edf3PrintWriterTb4b4b4(Te6edf3swTb4b4b4)Tb4b4b4;
Te6edf3errorTb4b4b4.Te6edf3printStackTraceTb4b4b4(Te6edf3pwTb4b4b4)Tb4b4b4;
Te6edf3pwTb4b4b4.Te6edf3flushTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3swTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffshowStartupErrorTb4b4b4(Te6edf3String Te6edf3messageTb4b4b4) Tb4b4b4{
Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3mainHandlerTb4b4b4.Te6edf3removeCallbacksAndMessagesTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3webViewTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3INVISIBLETb4b4b4)Tb4b4b4;
Te6edf3loadingLogoTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3progressBarTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Te6edf3loadingTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3errorText Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3errorTextTb4b4b4.Te6edf3setTextTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4;
Te6edf3errorTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Tffa657void Td2a8ffshowLoadingTb4b4b4(Te6edf3String Te6edf3messageTb4b4b4) Tb4b4b4{
Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3startupPageLoadedTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3webViewTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3INVISIBLETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadingLogo Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3loadingLogoTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3progressBarTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Te6edf3errorTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3GONETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3loadingText Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3loadingTextTb4b4b4.Te6edf3setTextTb4b4b4(Te6edf3formatLoadingMessageTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3loadingTextTb4b4b4.Te6edf3setVisibilityTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3viewTb4b4b4.Te6edf3ViewTb4b4b4.Te6edf3VISIBLETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72private Te6edf3String Td2a8ffformatLoadingMessageTb4b4b4(Te6edf3String Te6edf3fallbackMessageTb4b4b4) Tb4b4b4{
Tffa657int Te6edf3phaseIndex Tff7b72= Te6edf3MathTb4b4b4.Te6edf3minTb4b4b4(
Te6edf3STARTUP_PHASESTb4b4b4.Te6edf3length Tff7b72- T79c0ff1Tb4b4b4,
Tb4b4b4(Te6edf3connectionAttempts Tff7b72* Te6edf3STARTUP_PHASESTb4b4b4.Te6edf3lengthTb4b4b4) Tff7b72/ Te6edf3MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3MAX_CONNECTION_ATTEMPTSTb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3phase Tff7b72= Te6edf3STARTUP_PHASESTff7b72[Te6edf3phaseIndexTff7b72]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3connectionAttempts Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3phaseTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3phase Tff7b72+ Ta5d6ff"Ta5d6ff (Ta5d6ff" Tff7b72+ Te6edf3connectionAttempts Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72+ Te6edf3MAX_CONNECTION_ATTEMPTS Tff7b72+ Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tf0883e@Override
Tff7b72public Tffa657void Td2a8ffonBackPressedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3webViewTb4b4b4.Te6edf3canGoBackTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3webViewTb4b4b4.Te6edf3goBackTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onBackPressedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tf0883e@Override
Tff7b72protected Tffa657void Td2a8ffonDestroyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4.Te6edf3onDestroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3mainHandlerTb4b4b4.Te6edf3removeCallbacksAndMessagesTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pendingWebPermissionRequest Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3pendingWebPermissionRequestTb4b4b4.Te6edf3denyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pendingWebPermissionRequest Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3filePathCallback Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3filePathCallbackTb4b4b4.Te6edf3onReceiveValueTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3filePathCallback Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3webView Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3webViewTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72static Tff7b72class T56d364MeshChatXAndroidBridge Tb4b4b4{
Tff7b72private Tff7b72final Te6edf3MainActivity Te6edf3activityTb4b4b4;
Te6edf3MeshChatXAndroidBridgeTb4b4b4(Te6edf3MainActivity Te6edf3activityTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3activity Tff7b72= Te6edf3activityTb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657void Td2a8ffexitAppTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3finishAffinityTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3androidTb4b4b4.Te6edf3osTb4b4b4.Te6edf3ProcessTb4b4b4.Te6edf3killProcessTb4b4b4(Te6edf3androidTb4b4b4.Te6edf3osTb4b4b4.Te6edf3ProcessTb4b4b4.Te6edf3myPidTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Te6edf3String Td2a8ffgetPlatformTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657boolean Td2a8ffhasBluetoothPermissionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72< Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3STb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3activityTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_CONNECTTb4b4b4)
Tff7b72=Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTED
Tff7b72&Tff7b72& Te6edf3ContextCompatTb4b4b4.Te6edf3checkSelfPermissionTb4b4b4(Te6edf3activityTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_SCANTb4b4b4)
Tff7b72=Tff7b72= Te6edf3PackageManagerTb4b4b4.Te6edf3PERMISSION_GRANTEDTb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657void Td2a8ffrequestBluetoothPermissionsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72< Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3STb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3ListTff7b72<Te6edf3StringTff7b72> Te6edf3missing Tff7b72= Tff7b72new Te6edf3ArrayListTff7b72<Tff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3activityTb4b4b4.Te6edf3addIfMissingTb4b4b4(Te6edf3missingTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_CONNECTTb4b4b4)Tb4b4b4;
Te6edf3activityTb4b4b4.Te6edf3addIfMissingTb4b4b4(Te6edf3missingTb4b4b4, Te6edf3ManifestTb4b4b4.Te6edf3permissionTb4b4b4.Te6edf3BLUETOOTH_SCANTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3missingTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3ActivityCompatTb4b4b4.Te6edf3requestPermissionsTb4b4b4(
Te6edf3activityTb4b4b4,
Te6edf3missingTb4b4b4.Te6edf3toArrayTb4b4b4(Tff7b72new Te6edf3StringTff7b72[T79c0ff0Tff7b72]Tb4b4b4)Tb4b4b4,
Te6edf3RNODE_BLUETOOTH_PERMISSION_REQUEST_CODE
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657boolean Td2a8ffhasUsbPermissionsTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// WebUSB / Web Serial polyfill drives the device picker; from the
T8b949e// Android manifest standpoint USB host access is granted as soon as
T8b949e// the user accepts the per-device dialog. Surface true when we
T8b949e// have a UsbManager so the JS layer can short-circuit prompts.
Te6edf3UsbManager Te6edf3manager Tff7b72= Tb4b4b4(Te6edf3UsbManagerTb4b4b4) Te6edf3activityTb4b4b4.Te6edf3getSystemServiceTb4b4b4(Te6edf3ContextTb4b4b4.Te6edf3USB_SERVICETb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3manager Tff7b72!Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657void Td2a8ffrequestUsbPermissionsTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// No-op on android: per-device prompts are issued by WebUSB itself.
T8b949e// Method is exposed so the JS bridge contract is symmetric.
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657void Td2a8ffopenBluetoothSettingsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3startActivityTb4b4b4(Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_BLUETOOTH_SETTINGSTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3ActivityNotFoundException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Te6edf3ToastTb4b4b4.Te6edf3makeTextTb4b4b4(Te6edf3activityTb4b4b4, Ta5d6ff"Ta5d6ffBluetooth settings unavailableTa5d6ff"Tb4b4b4, Te6edf3ToastTb4b4b4.Te6edf3LENGTH_SHORTTb4b4b4)Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@JavascriptInterface
Tff7b72public Tffa657void Td2a8ffopenUsbSettingsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3runOnUiThreadTb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3activityTb4b4b4.Te6edf3startActivityTb4b4b4(Tff7b72new Te6edf3IntentTb4b4b4(Te6edf3SettingsTb4b4b4.Te6edf3ACTION_APPLICATION_DETAILS_SETTINGSTb4b4b4,
Te6edf3UriTb4b4b4.Te6edf3parseTb4b4b4(Ta5d6ff"Ta5d6ffpackage:Ta5d6ff" Tff7b72+ Te6edf3activityTb4b4b4.Te6edf3getPackageNameTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3ActivityNotFoundException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Te6edf3ToastTb4b4b4.Te6edf3makeTextTb4b4b4(Te6edf3activityTb4b4b4, Ta5d6ff"Ta5d6ffUSB settings unavailableTa5d6ff"Tb4b4b4, Te6edf3ToastTb4b4b4.Te6edf3LENGTH_SHORTTb4b4b4)Tb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────